home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / valc204 / valc204.bas next >
BASIC Source File  |  1993-07-08  |  27KB  |  592 lines

  1. 10 '*********************************** F-BASIC386CP V2.1 L10
  2. 20 '*  TITLE = VALCAL.BAS・VALCAL.EXP  * Ver 2.04 1993, 2,14  FM-TOWNS 1H
  3. 30 '*    2~16進整数四則演算器     * ※F-BASIC386CP V2.1 L10 版
  4. 40 '*  1992,1,23 Copyright A.Okuyama  *   
  5. 50 '*********************************** 
  6. 60 *MAIN:'***********************  初期設定  ***************************
  7. 70 ON ERROR GOTO *ERRLOOP
  8. 80 CLEAR:DIM D#(254,2),P$(254),CAL%(254),A$(254),NISHIN$(254),DUM$(254),MPARTS%(254)
  9. 90 FOR C=1 TO 31
  10. 100 IF C/4=INT(C/4) THEN NISHIN$(C)="_"
  11. 110 NEXT C
  12. 120 CONSOLE 0,24,2:SCREEN@ 0:VIEW (0,0)-(639,479):'PALETTE 0,[50,0,30]
  13. 130 PALETTE  0,[16* 3,16* 0,16* 1]:'***** バック・グラウンドの緑色
  14. 140 PALETTE 13,[16* 0,16* 0,16*11]:'***** 
  15. 150 PALETTE 14,[16* 0,16* 6,16* 6]:'*****
  16. 160 PALETTE 15,[16* 0,16*11,16* 0]:'*****
  17. 170 EFFICIENCY$=".0000000000000000"
  18. 180 '***** mouse patarn *****
  19. 190 ANDP$=CHR$(&HF0,&HF0,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F)
  20. 200 DOTP$=CHR$(&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0,&H0F,&HF0)
  21. 210 *RECFILE:'***** 過去の計算記録ファイルを開く *****
  22. 220 COLOR 6,%0,%0
  23. 230 CLS
  24. 240 LINE (0,19)-(639,25),PSET,%13,BF,%13
  25. 250 LINE (0,26)-(639,29),PSET,%14,BF,%14
  26. 260 LINE (0,30)-(639,37),PSET,%15,BF,%15
  27. 270 LOCATE 7,12
  28. 280 PRINT "《Aドライブにデータ用フロッピーを挿入しボタンを押してください。》"
  29. 290 MOUSE 0
  30. 300 RECFILE=0
  31. 310 *DRIVECK 
  32. 320 GOSUB *PANEL
  33. 330 ON ERROR GOTO *RECERR
  34. 340 I$=INKEY$
  35. 350 IF MOUSE(2,0) THEN I$=CHR$(13)
  36. 360 IF I$="" THEN *DRIVECK
  37. 370 EP=1
  38. 380 SHELL "A:"
  39. 390 SHELL "CD \"
  40. 400 EP=2
  41. 410 SHELL "MD A:\VALCREC"
  42. 420 EP=0
  43. 430 SHELL "CD VALCREC"
  44. 440 CLOSE
  45. 450 OPEN "R",#1,"VALCREC.DAT"
  46. 460 FIELD #1,255 AS VALCREC$
  47. 470 GOSUB *MUSOFF
  48. 480 DNOMAX=LOF(1)
  49. 490 RECFILE=1
  50. 500 CLOSE #1
  51. 510 ON ERROR GOTO 0
  52. 520 '****************************  スタート  ****************************
  53. 530 *START:COLOR 0,%0,%0:CLS
  54. 540 LINE (0,19)-(639,25),PSET,%13,BF,%13
  55. 550 LINE (0,26)-(639,29),PSET,%14,BF,%14
  56. 560 LINE (0,30)-(639,37),PSET,%15,BF,%15
  57. 570 MEMOFLAG=0:FW$=I$
  58. 580 GOSUB *PANEL:'               ***** タイトル表示             *****
  59. 590 GOSUB *COMMENT:'             ***** コメント表示             *****
  60. 600 COLOR 6:LOCATE 0,2:PRINT "前 回 =";
  61. 610 GOSUB *MEMOPRT:'             ***** 前回の式を表示する       *****
  62. 620 COLOR 6
  63. 630 GOSUB *OUTPUT:'              ***** 前回の計算結果を表示する *****
  64. 640 COLOR 7:PRINT "計算式=";
  65. 650 IF S$="R" OR S$="r" THEN S$="":GOTO *START2
  66. 660 GOSUB *COMLCL:'              ***** コマンド・ライン消去     *****
  67. 670 *START2
  68. 680 GOSUB *MUSON:'               ***** マウスON               *****
  69. 690 GOSUB *COMLINE:'             ***** コマンド・ライン入力     *****
  70. 700 GOSUB *COMMCLS:'             ***** コメント表示消去         *****
  71. 710 GOSUB *STANDBY:'             ***** 変数を初期化する         *****
  72. 720 GOSUB *DERIV:'               ***** 数字と演算記号を抽出する *****
  73. 730 GOSUB *CONV:'                ***** 10進数に変換する       *****
  74. 740 GOSUB *CALC:'                ***** 式計算ルーチン           *****
  75. 750 GOSUB *SUBPRT:'              ***** 計算経過を表示する       *****
  76. 760 GOSUB *OUTPUT:'              ***** 10・16・2進数計算結果表示  *****
  77. 770 GOSUB *CONVOUT:'             ***** 3~15進数計算結果表示    *****
  78. 780 COLOR 4:PRINT "  《 ESC・BREAK キーで終了します。R,rで前回復活。他のキーは新入力になります。》":COLOR 7
  79. 790 CSRX%=0:CSRY%=CSRLIN-1
  80. 800 *STP:S$=INKEY$:GOSUB *PANEL
  81. 810 IF MOUSE(2,0) THEN GOSUB *ENDMUSIN
  82. 820 IF S$="" THEN *STP
  83. 830 IF S$="R" OR S$="r" THEN MEMORY$=FW$:GOSUB *COMLCL:GOSUB *APPEND:GOTO *START
  84. 840 IF S$<>CHR$(27) THEN *START
  85. 850 GOSUB *MUSOFF:'              ***** マウスOFF             *****
  86. 860 SYSTEM
  87. 870 '********************************************************************
  88. 880 *MUSON:'***** マウスON *****
  89. 890 MOUSE 0:MOUSE 1,319,239,1:MOUSE 2,ANDP$,DOTP$,7,7
  90. 900 RETURN
  91. 910 *MUSOFF:'***** マウスOFF *****
  92. 920 MOUSE 5
  93. 930 RETURN
  94. 940 *MUSTIME:'***** マウス・カウント時間調整 *****
  95. 950 FOR MUSTIME=1 TO 5:GOSUB *PANEL:NEXT MUSTIME
  96. 960 RETURN
  97. 970 *ENDMUSIN:'***** END処理マウス入力 *****
  98. 980 MUSX%=INT(MOUSE(0)/8):MUSY%=INT(MOUSE(1)/19)
  99. 990 IF 5<=MUSX% AND MUSX%<=13 AND MUSY%=CSRY% THEN S$=CHR$(27):RETURN
  100. 1000 S$=CHR$(SCREEN(MUSX%,MUSY%,0))
  101. 1010 GOSUB *MUSTIME
  102. 1020 RETURN
  103. 1030 *STANDBY:'***** 変数を初期化する *****
  104. 1040 TOTAL#=0:CLASS=0:CLMAX=0:PARTS=0:FOR C=0 TO 254:D#(C,0)=0:D#(C,1)=0:D#(C,2)=0:CAL%(C)=0:P$(C)="":NEXT C
  105. 1050 RETURN
  106. 1060 *PANEL:'***** 0行目タイトル表示 *****
  107. 1070 ON ERROR GOTO *ERRLOOP
  108. 1080 LOCATE 0,0
  109. 1090 COLOR 2:PRINT "        赤色は実数エラー箇所    ";
  110. 1100 COLOR 5:PRINT "水色は虚数エラー箇所    ";
  111. 1110 COLOR 3:PRINT "紫色は警告箇所        ";
  112. 1120 LOCATE 0,1
  113. 1130 COLOR 14:PRINT USING "  &      &  Ver 2.04  ";DATE$;
  114. 1140 COLOR 12:PRINT " 2 ~ 16 進 整 数 四 則 演 算 器 ";
  115. 1150 COLOR 14:PRINT USING " A.Okuyama  &      &  ";TIME$;
  116. 1160 RETURN
  117. 1170 *COMMENT:'***** コメント表示 *****
  118. 1180 LOCATE 0,13
  119. 1190 COLOR 4:PRINT "入力条件:各入力項が ±1.79769313486231D+308 以内。計算式の総桁数は255文字まで。":COLOR 5
  120. 1200 PRINT "     計算の都合上、10進数換算で小数点以下15桁未満を切り捨てます。"
  121. 1210 PRINT "          各項の直後に@マークに続けて2~16進数を指定してください。"
  122. 1220 PRINT "          ただし、10進数の場合は省略できます。また16進数はH,hで代用できます。"
  123. 1230 PRINT "          なお、省略10進数以外の小数点は0と見なすので注意が必要です。"
  124. 1240 PRINT "          [{()}]*/+-^0123456789AaBbCcDdEeFf@HhGgLlMm[空白][ESC][取消][削除]"
  125. 1250 PRINT "          [挿入][BACK-SKIP]←↑↓→[RETURN][実行]RrXxの各キーが使えます。"
  126. 1260 COLOR 4:PRINT "出力条件:-4294967295 ≦ 出 力 項 ≦ 4294967295 (FFFFFFFFh)":COLOR 5
  127. 1270 PRINT "          16進数はHEX$()を使用していますので10進小数点以下の値を切り捨てます。";
  128. 1280 COLOR 4:PRINT "入力方法:前回の各項はG(g)、式はL(l)、解はM(m)キーでカーソル位置に挿入します。 ":COLOR 5
  129. 1290 PRINT "   (例) 計算式=-[-{FFH+fah*-10@16}-{56@7-12@4*(32-5*2)}/-40@6]-{42@7^5^(1/2)}";
  130. 1300 RETURN
  131. 1310 *COMMCLS:'***** コメント表示消去 *****
  132. 1320 CSRX%=POS(0):CSRY%=CSRLIN
  133. 1330 COLOR 7:FOR Y=13 TO 24:LOCATE 0,Y:PRINT SPACE$(79);:NEXT Y
  134. 1340 LOCATE CSRX%,CSRY%
  135. 1350 RETURN
  136. 1360 *MEMOPRT:'********** 前回の式を表示する。**********
  137. 1370 ON ERROR GOTO *ERRLOOP
  138. 1380 MEMOCSRX%=8:MEMOCSRY%=2
  139. 1390 LOCATE MEMOCSRX%,MEMOCSRY%
  140. 1400 FOR MC%=0 TO PARTS
  141. 1410 COLOR 6
  142. 1420 IF CAL%(MC%)=1 THEN PRINT "*";
  143. 1430 IF CAL%(MC%)=2 THEN PRINT "/";
  144. 1440 IF CAL%(MC%)=3 THEN PRINT "+";
  145. 1450 IF CAL%(MC%)=4 THEN PRINT "-";
  146. 1460 IF CAL%(MC%)=5 THEN PRINT "^";
  147. 1470 IF CAL%(MC%)=10 THEN PRINT "(";
  148. 1480 IF CAL%(MC%)=-10 THEN PRINT ")";
  149. 1490 IF D#(MC%,2)<> 0 THEN COLOR 7-D#(MC%,2)
  150. 1500 IF MC%=MPARTS%(MEMOCSX%) AND MEMOFLAG=1 THEN IF D#(MC%,2)=0 THEN COLOR 14 ELSE COLOR 15-D#(MC%,2)
  151. 1510 PRINT P$(MC%);
  152. 1520 NEXT MC%:PRINT
  153. 1530 RETURN
  154. 1540 '****************** コマンド・ライン入力ルーチン ********************
  155. 1550 *COMLCL
  156. 1560 ON ERROR GOTO *ERRLOOP
  157. 1570 FOR C%=0 TO 254:DUM$(C%)="":NEXT C%
  158. 1580 RETURN
  159. 1590 *COMLINE
  160. 1600 ON ERROR GOTO *ERRLOOP
  161. 1610 CSRX%=POS(0):CSRY%=CSRLIN:CSX%=0:CSY%=0:GOSUB *PACK:COLOR 13:GOSUB *CPRT:COLOR 7
  162. 1620 *INKEY:GOSUB *PANEL:'********** 計算式入力ルーチン **********
  163. 1630 ON ERROR GOTO *ERRLOOP
  164. 1640 K$=INKEY$
  165. 1650 IF MOUSE(2,0) THEN GOSUB *LINMUSIN
  166. 1660 IF K$="" THEN *INKEY
  167. 1670 IF K$="R" OR K$="r" THEN GOSUB *PACK:GOSUB *RECSET:COLOR 13:GOSUB *CPRT:GOTO *INKEY
  168. 1680 IF K$="G" OR K$="g" THEN MEMOFLAG=0:GOSUB *MEMORY:MEMOFLAG=1:MEMOCSX%=0:GOSUB *MEMOPRT:GOSUB *MEMORY:PRINT:GOSUB *PACK:GOSUB *APPEND:GOSUB *PACK:COLOR 13:GOSUB *CPRT:COLOR 7:MEMOFLAG=0:GOSUB *MEMOPRT:GOTO *INKEY
  169. 1690 IF K$="L" OR K$="l" THEN IF FW$<>"" THEN MEMORY$=FW$:GOSUB *PACK:GOSUB *APPEND:GOSUB *PACK:COLOR 13:GOSUB *CPRT:COLOR 7:GOTO *INKEY
  170. 1700 IF K$="M" OR K$="m" THEN IF ER=0 THEN GOSUB *REPLY:GOSUB *PACK:GOSUB *APPEND:GOSUB *PACK:COLOR 13:GOSUB *CPRT:COLOR 7:GOTO *INKEY ELSE *INKEY
  171. 1710 IF K$=CHR$(28) THEN COLOR 7:GOSUB *CPRT:GOSUB *RIGHT:COLOR 13:GOSUB *CPRT:GOTO *INKEY
  172. 1720 IF K$=CHR$(29) THEN COLOR 7:GOSUB *CPRT:GOSUB *LEFT:COLOR 13:GOSUB *CPRT:GOTO *INKEY
  173. 1730 IF K$=CHR$(30) THEN COLOR 7:GOSUB *CPRT:GOSUB *UP:COLOR 13:GOSUB *CPRT:GOTO *INKEY
  174. 1740 IF K$=CHR$(31) THEN COLOR 7:GOSUB *CPRT:GOSUB *DOWN:COLOR 13:GOSUB *CPRT:GOTO *INKEY
  175. 1750 IF K$=CHR$(8) THEN GOSUB *PACK:COLOR 13:GOSUB *CPRT:COLOR 7:GOTO *INKEY
  176. 1760 IF K$=CHR$(13) THEN GOSUB *PACK:RETURN
  177. 1770 IF K$=CHR$(27) THEN SYSTEM
  178. 1780 IF K$=CHR$(18) THEN GOSUB *INS:GOTO *INKEY
  179. 1790 IF K$=CHR$(&H7F) OR K$=" " THEN GOSUB *DEL:COLOR 13:GOSUB *CPRT:COLOR 7:GOTO *INKEY
  180. 1800 IF &H27<ASC(K$) AND ASC(K$)<&H3A AND K$<>"'" AND K$<>"," THEN DUM$(CSX%)=K$:COLOR 7:GOSUB *CPRT:GOSUB *RIGHT:COLOR 13:GOSUB *CPRT:GOTO *INKEY
  181. 1810 IF &H3F<ASC(K$) AND ASC(K$)<&H49 THEN DUM$(CSX%)=K$:COLOR 7:GOSUB *CPRT:GOSUB *RIGHT:COLOR 13:GOSUB *CPRT:GOTO *INKEY
  182. 1820 IF &H60<ASC(K$) AND ASC(K$)<&H69 THEN DUM$(CSX%)=K$:COLOR 7:GOSUB *CPRT:GOSUB *RIGHT:COLOR 13:GOSUB *CPRT:GOTO *INKEY
  183. 1830 IF K$="[" OR K$="]" OR K$="^" OR K$="{" OR K$="}" THEN DUM$(CSX%)=K$:COLOR 7:GOSUB *CPRT:GOSUB *RIGHT:COLOR 13:GOSUB *CPRT:GOTO *INKEY ELSE *INKEY
  184. 1840 *LINMUSIN:'***** コマンド・ライン マウス入力 *****
  185. 1850 MUSX%=INT(MOUSE(0)/8):MUSY%=INT(MOUSE(1)/19)
  186. 1860 IF 59<=MUSX% AND MUSX%<=68 AND MUSY%=18 THEN K$=CHR$(27):RETURN
  187. 1870 IF 53<=MUSX% AND MUSX%<=58 AND MUSY%=18 THEN K$=" ":RETURN
  188. 1880 IF 69<=MUSX% AND MUSX%<=71 AND MUSY%=18 THEN K$=CHR$(&H7F):RETURN
  189. 1890 IF 10<=MUSX% AND MUSX%<=15 AND MUSY%=19 THEN K$=CHR$(18):RETURN
  190. 1900 IF 16<=MUSX% AND MUSX%<=26 AND MUSY%=19 THEN K$=CHR$(8):RETURN
  191. 1910 IF 27<=MUSX% AND MUSX%<=28 AND MUSY%=19 THEN K$=CHR$(&H1D):RETURN
  192. 1920 IF 29<=MUSX% AND MUSX%<=30 AND MUSY%=19 THEN K$=CHR$(&H1E):RETURN
  193. 1930 IF 31<=MUSX% AND MUSX%<=32 AND MUSY%=19 THEN K$=CHR$(&H1F):RETURN
  194. 1940 IF 33<=MUSX% AND MUSX%<=34 AND MUSY%=19 THEN K$=CHR$(&H1C):RETURN
  195. 1950 IF 35<=MUSX% AND MUSX%<=48 AND MUSY%=19 THEN K$=CHR$(13):RETURN
  196. 1960 K$=CHR$(SCREEN(MUSX%,MUSY%,0))
  197. 1970 GOSUB *MUSTIME
  198. 1980 RETURN
  199. 1990 *RIGHT:'***** カーソルを右へ移動する。 *****
  200. 2000 IF CSX%<254 THEN CSX%=CSX%+1
  201. 2010 RETURN
  202. 2020 *LEFT:'***** カーソルを左へ移動する。 *****
  203. 2030 IF 0<CSX% THEN CSX%=CSX%-1
  204. 2040 RETURN
  205. 2050 *UP:'***** カーソルを上へ移動する。 *****
  206. 2060 IF 0<=CSX%-80 THEN CSX%=CSX%-80
  207. 2070 RETURN
  208. 2080 *DOWN:'***** カーソルを下へ移動する。 *****
  209. 2090 IF CSX%+80<=254 THEN CSX%=CSX%+80
  210. 2100 RETURN
  211. 2110 *CPRT:'***** カーソルを表示する。*****
  212. 2120 ON ERROR GOTO *ERRLOOP
  213. 2130 CSY%=CSRY%+INT((CSRX%+CSX%)/80)
  214. 2140 LOCATE CSRX%+CSX%-INT((CSRX%+CSX%)/80)*80,CSY%
  215. 2150 IF DUM$(CSX%)="" THEN PRINT " " ELSE PRINT DUM$(CSX%)
  216. 2160 RETURN
  217. 2170 *PACK:'***** 計算式を文字詰めする。*****
  218. 2180 ON ERROR GOTO *ERRLOOP
  219. 2190 I$="":CSC%=0:'***** CSC%=LEN(I$)
  220. 2200 FOR C%=1 TO 255
  221. 2210 I$=I$+DUM$(C%-1):IF DUM$(C%-1)<>"" THEN CSC%=CSC%+1:DUM$(C%-1)=""
  222. 2220 IF C%=CSX% AND 0<CSX% THEN CSX%=CSC%
  223. 2230 IF CSX%<0 THEN CSX%=0
  224. 2240 NEXT C%
  225. 2250 FOR C%=1 TO LEN(I$)
  226. 2260 DUM$(C%-1)=MID$(I$,C%,1)
  227. 2270 NEXT C%
  228. 2280 LOCATE CSRX%,CSRY%:COLOR 7
  229. 2290 FOR C%=1 TO 255:PRINT " ";:NEXT C%
  230. 2300 LOCATE CSRX%,CSRY%
  231. 2310 COLOR 7:IF LEN(I$)=0 THEN *PACKJP
  232. 2320 FOR C%=1 TO LEN(I$)
  233. 2330 PRINT MID$(I$,C%,1);
  234. 2340 NEXT C%
  235. 2350 *PACKJP:PRINT
  236. 2360 RETURN
  237. 2370 *APPEND:'***** 選択したMEMORY$を計算式のカーソル位置に挿入する。*****
  238. 2380 ON ERROR GOTO *ERRLOOP
  239. 2390 SUBI$="":IF CSX%=0 THEN *APJP1
  240. 2400 FOR MC%=0 TO CSX%-1
  241. 2410 SUBI$=SUBI$+DUM$(MC%)
  242. 2420 NEXT MC%
  243. 2430 *APJP1
  244. 2440 IF LEN(SUBI$)=255 THEN *APJP2
  245. 2450 SUBI$=SUBI$+LEFT$(MEMORY$,255-LEN(SUBI$))
  246. 2460 FOR MC%=CSX% TO 254
  247. 2470 IF LEN(SUBI$)+LEN(DUM$(MC%))<=255 THEN SUBI$=SUBI$+DUM$(MC%)
  248. 2480 NEXT MC%
  249. 2490 *APJP2
  250. 2500 IF LEN(SUBI$)=0 THEN RETURN
  251. 2510 FOR MC%=1 TO LEN(SUBI$)
  252. 2520 DUM$(MC%-1)=MID$(SUBI$,MC%,1)
  253. 2530 NEXT MC%
  254. 2540 RETURN
  255. 2550 *DEL:'***** 計算式のカーソル位置の1文字を削除する。*****
  256. 2560 ON ERROR GOTO *ERRLOOP
  257. 2570 DUM$(CSX%)=""
  258. 2580 COLOR 7:GOSUB *CPRT:GOSUB *RIGHT
  259. 2590 IF K$=" " THEN RETURN:'***** K$が空白ならば文字詰めしない。
  260. 2600 GOSUB *PACK
  261. 2610 RETURN
  262. 2620 *INS:'***** 計算式のカーソル位置に空白を挿入する。*****
  263. 2630 ON ERROR GOTO *ERRLOOP
  264. 2640 IF CSX%=254 THEN *INSJP
  265. 2650 FOR C%=254 TO CSX%+1 STEP -1
  266. 2660 DUM$(C%)=DUM$(C%-1)
  267. 2670 NEXT C%
  268. 2680 *INSJP:DUM$(CSX%)=""
  269. 2690 COLOR 7:LOCATE CSRX%,CSRY%
  270. 2700 FOR C%=1 TO 255
  271. 2710 IF DUM$(C%-1)="" THEN PRINT " "; ELSE PRINT DUM$(C%-1);
  272. 2720 NEXT C%
  273. 2730 COLOR 13:GOSUB *CPRT:COLOR 7
  274. 2740 RETURN
  275. 2750 *RECSET:'***** A:\VALCREC\VALCREC.DATに記録した式を読み出す *****
  276. 2760 ON ERROR GOTO 0
  277. 2770 IF RECFILE=0 THEN RETURN
  278. 2780 NEWREC$=I$
  279. 2790 OPEN "R",#1,"VALCREC.DAT"
  280. 2800 FIELD #1,255 AS VALCREC$
  281. 2810 IF LOF(1)<4000 THEN DNOMAX=LOF(1) ELSE DNOMAX=3999
  282. 2820 DNO=DNOMAX+1
  283. 2830 IF DNOMAX=0 THEN *RECRW
  284. 2840 *RECLOOP:'***** 選択処理 *****
  285. 2850 IF DNO<=DNOMAX THEN GET #1,DNO ELSE LSET VALCREC$=NEWREC$
  286. 2860 READREC$="":RECP$=""
  287. 2870 FOR COLUM=1 TO 255
  288. 2880 RECP$=MID$(VALCREC$,COLUM,1)
  289. 2890 IF RECP$<>" " THEN READREC$=READREC$+RECP$
  290. 2900 NEXT COLUM
  291. 2910 COLOR 7
  292. 2920 LOCATE 0,CSRY%
  293. 2930 PRINT USING "録####=";DNO;
  294. 2940 COLOR 13
  295. 2950 IF LEN(READREC$)=0 THEN *RECPRT1
  296. 2960 FOR C%=1 TO LEN(READREC$)
  297. 2970 PRINT MID$(READREC$,C%,1);
  298. 2980 NEXT C%
  299. 2990 *RECPRT1
  300. 3000 COLOR 7
  301. 3010 IF 255<=C% THEN *RECPRTJP
  302. 3020 FOR CC%=C% TO 255
  303. 3030 PRINT " ";
  304. 3040 NEXT CC%
  305. 3050 *RECPRTJP
  306. 3060 *RECINK:'***** 選択入力 *****
  307. 3070 GOSUB *PANEL
  308. 3080 I$=INKEY$
  309. 3090 IF MOUSE(2,0) THEN GOSUB *LINMUSIN:I$=K$
  310. 3100 IF I$="" THEN *RECINK
  311. 3110 IF I$=CHR$(&H1D) OR I$=CHR$(&H1E) THEN DNO=DNO-1
  312. 3120 IF I$=CHR$(&H1C) OR I$=CHR$(&H1F) THEN DNO=DNO+1
  313. 3130 IF I$=CHR$(&H18) OR I$=CHR$(&H1B) THEN *EORECSET
  314. 3140 IF (I$="X" OR I$="x") AND NEWREC$<>"" THEN GOSUB *RECXCHG
  315. 3150 IF I$=CHR$(13) THEN *RECRW
  316. 3160 IF DNO<1 THEN DNO=DNOMAX+1
  317. 3170 IF DNOMAX+1<DNO THEN DNO=1
  318. 3180 GOTO *RECLOOP
  319. 3190 *RECRW:'***** A:\VALCREC\VALCREC.DAT書き込み *****
  320. 3200 IF DNOMAX<DNO AND 0<LEN(NEWREC$) THEN LSET VALCREC$=NEWREC$:I$=NEWREC$:PUT #1,DNO
  321. 3210 IF DNO<=DNOMAX THEN LSET VALCREC$=READREC$:I$=READREC$
  322. 3220 FOR C%=1 TO 255
  323. 3230 DUM$(C%-1)=MID$(I$,C%,1)
  324. 3240 NEXT C%
  325. 3250 *EORECSET:'***** 選択処理終了 *****
  326. 3260 COLOR 7
  327. 3270 LOCATE 0,CSRY%
  328. 3280 PRINT "計算式=";
  329. 3290 CLOSE #1
  330. 3300 GOSUB *PACK
  331. 3310 RETURN
  332. 3320 *RECXCHG:'***** 記録データの入替え *****
  333. 3330 IF DNOMAX<DNO THEN LSET VALCREC$=READREC$:DNOMAX=LOF(1) ELSE LSET VALCREC$=NEWREC$:DNOMAX=DNO-1
  334. 3340 RETURN
  335. 3350 '********************* 前回メモリー選択ルーチン *********************
  336. 3360 *REPLY:'***** 前回の解を指定するメモリー処理(指数表記を改める)*****
  337. 3370 MEMORY$=""
  338. 3380 FOR C%=1 TO LEN(STR$(TOTAL#))
  339. 3390 DUM$=MID$(STR$(TOTAL#),C%,1)
  340. 3400 IF DUM$="D" THEN MEMORY$="("+MEMORY$+"*10^("+RIGHT$(STR$(TOTAL#),4)+"))":C%=LEN(STR$(TOTAL#)):GOTO *REPLYJP
  341. 3410 MEMORY$=MEMORY$+DUM$
  342. 3420 *REPLYJP
  343. 3430 NEXT C%
  344. 3440 RETURN
  345. 3450 *MEMORY:'***** 前回の項を指定するメモリー処理 *****
  346. 3460 ON ERROR GOTO *ERRLOOP
  347. 3470 MEMOCSX%=0:MEMOPARTS%=0
  348. 3480 FOR MC%=0 TO PARTS
  349. 3490 IF P$(MC%)<>"" THEN MPARTS%(MEMOPARTS%)=MC%:MEMOPARTS%=MEMOPARTS%+1
  350. 3500 IF MEMOFLAG=0 AND MEMOCSX%=0 AND P$(MC%)<>"" THEN MEMOCSX%=MC%
  351. 3510 NEXT MC%
  352. 3520 MEMORY$=P$(MPARTS%(MEMOCSX%))
  353. 3530 IF MEMOPARTS%=0 OR MEMOFLAG=0 THEN RETURN
  354. 3540 *MEMOINKEY:'***** 前回の式の項を指定する。*****
  355. 3550 ON ERROR GOTO *ERRLOOP
  356. 3560 GOSUB *PANEL
  357. 3570 MEM$=INKEY$
  358. 3580 IF MOUSE(2,0) THEN GOSUB *MEMMUSIN
  359. 3590 IF MEM$="" THEN *MEMOINKEY
  360. 3600 IF MEM$=CHR$(&H1C) THEN GOSUB *MEMORIGHT:GOSUB *MEMOPRT:GOTO *MEMOINKEY
  361. 3610 IF MEM$=CHR$(&H1D) THEN GOSUB *MEMOLEFT:GOSUB *MEMOPRT:GOTO *MEMOINKEY
  362. 3620 IF MEM$=CHR$(&H18) OR MEM$=CHR$(27) THEN MEMORY$="":PRINT:RETURN
  363. 3630 IF MEM$=CHR$(13) THEN GOSUB *MEMOPRT:RETURN
  364. 3640 GOTO *MEMOINKEY
  365. 3650 *MEMMUSIN:'***** メモリー・マウス入力 *****
  366. 3660 MUSX%=INT(MOUSE(0)/8):MUSY%=INT(MOUSE(1)/19)
  367. 3670 IF 59<=MUSX% AND MUSX%<=68 AND MUSY%=18 THEN MEM$=CHR$(27):RETURN
  368. 3680 IF 53<=MUSX% AND MUSX%<=58 AND MUSY%=18 THEN MEM$=" ":RETURN
  369. 3690 IF 69<=MUSX% AND MUSX%<=71 AND MUSY%=18 THEN MEM$=CHR$(&H7F):RETURN
  370. 3700 IF 10<=MUSX% AND MUSX%<=15 AND MUSY%=19 THEN MEM$=CHR$(18):RETURN
  371. 3710 IF 16<=MUSX% AND MUSX%<=26 AND MUSY%=19 THEN MEM$=CHR$(8):RETURN
  372. 3720 IF 27<=MUSX% AND MUSX%<=28 AND MUSY%=19 THEN MEM$=CHR$(&H1D):RETURN
  373. 3730 IF 29<=MUSX% AND MUSX%<=30 AND MUSY%=19 THEN MEM$=CHR$(&H1E):RETURN
  374. 3740 IF 31<=MUSX% AND MUSX%<=32 AND MUSY%=19 THEN MEM$=CHR$(&H1F):RETURN
  375. 3750 IF 33<=MUSX% AND MUSX%<=34 AND MUSY%=19 THEN MEM$=CHR$(&H1C):RETURN
  376. 3760 IF 35<=MUSX% AND MUSX%<=48 AND MUSY%=19 THEN MEM$=CHR$(13):RETURN
  377. 3770 MEM$=CHR$(SCREEN(MUSX%,MUSY%,0))
  378. 3780 GOSUB *MUSTIME
  379. 3790 RETURN
  380. 3800 *MEMORIGHT:'***** 前回の式の中で、現在の指定よりも一つ右の項 *****
  381. 3810 ON ERROR GOTO *ERRLOOP
  382. 3820 IF MEMOCSX%<MEMOPARTS%-1 THEN MEMOCSX%=MEMOCSX%+1:MEMORY$=P$(MPARTS%(MEMOCSX%))
  383. 3830 RETURN
  384. 3840 *MEMOLEFT:'***** 前回の式の中で、現在の指定よりも一つ左の項 *****
  385. 3850 ON ERROR GOTO *ERRLOOP
  386. 3860 IF 0<MEMOCSX% THEN MEMOCSX%=MEMOCSX%-1:MEMORY$=P$(MPARTS%(MEMOCSX%))
  387. 3870 RETURN
  388. 3880 '************************* 式評価ルーチン ***************************
  389. 3890 '***** 数字("P$(PARTS)")と演算記号("CAL%(PARTS)")を抽出する。*****
  390. 3900 *DERIV
  391. 3910 ON ERROR GOTO *ERRLOOP
  392. 3920 FOR X=1 TO LEN(I$)
  393. 3930 A$=MID$(I$,X,1)
  394. 3940 IF A$="(" OR A$="[" OR A$="{" THEN PARTS=PARTS+1:CLASS=CLASS+1:CAL%(PARTS)=10:CLMAX=CLMAX+1:GOTO *DVJP1
  395. 3950 IF A$=")" OR A$="]" OR A$="}" THEN PARTS=PARTS+1:CLASS=CLASS-1:CAL%(PARTS)=-10:GOTO *DVJP1
  396. 3960 IF A$="*" THEN PARTS=PARTS+1:CAL%(PARTS)=1:GOTO *DVJP1
  397. 3970 IF A$="/" THEN PARTS=PARTS+1:CAL%(PARTS)=2:GOTO *DVJP1
  398. 3980 IF A$="+" THEN IF P$(PARTS)="" AND CAL%(PARTS)<>-10 THEN P$(PARTS)="1":PARTS=PARTS+1:CAL%(PARTS)=1+(CAL%(PARTS-1)=3)+INT((CAL%(PARTS-1)-INT(CAL%(PARTS-1)/10)*10)/2)*(CAL%(PARTS-1) AND 2)/2:GOTO *DVJP1 ELSE PARTS=PARTS+1:CAL%(PARTS)=3:GOTO *DVJP1
  399. 3990 IF A$="-" THEN IF P$(PARTS)="" AND CAL%(PARTS)<>-10 THEN P$(PARTS)="-1":PARTS=PARTS+1:CAL%(PARTS)=1+(CAL%(PARTS-1)=3)+INT((CAL%(PARTS-1)-INT(CAL%(PARTS-1)/10)*10)/2)*(CAL%(PARTS-1) AND 2)/2:GOTO *DVJP1 ELSE PARTS=PARTS+1:CAL%(PARTS)=4:GOTO *DVJP1
  400. 4000 IF A$="^" THEN PARTS=PARTS+1:CAL%(PARTS)=5:GOTO *DVJP1
  401. 4010 P$(PARTS)=P$(PARTS)+A$
  402. 4020 *DVJP1:NEXT X
  403. 4030 RETURN
  404. 4040 '***** 数字("P$(COUNT)")を10進数("D#(COUNT,0)")に変換する。******
  405. 4050 *CONV
  406. 4060 ON ERROR GOTO *ERRLOOP
  407. 4070 ER=0
  408. 4080 FOR COUNT=0 TO PARTS
  409. 4090 P$=""
  410. 4100 FOR X=1 TO LEN(P$(COUNT))
  411. 4110 A$=MID$(P$(COUNT),X,1)
  412. 4120 IF A$="@" THEN SHIN#=VAL(RIGHT$(P$(COUNT),LEN(P$(COUNT))-X)):GOTO *HENKAN
  413. 4130 IF A$="H" OR A$="h" THEN SHIN#=16:GOTO *HENKAN
  414. 4140 P$=P$+A$
  415. 4150 NEXT X
  416. 4160 IF VAL(P$)=INT(VAL(P$)) THEN P$=P$+LEFT$(EFFICIENCY$,255-LEN(P$)) ELSE P$=P$+MID$(EFFICIENCY$,2,255-LEN(P$))
  417. 4170 D#(COUNT,0)=VAL(P$):GOTO *DERIVJP2
  418. 4180 *HENKAN:A#=0:IF P$="" THEN D#(COUNT,2)=5:ER=1:GOTO *ERJP
  419. 4190 FOR C=0 TO X-2
  420. 4200 A$(C)=MID$(P$,C+1,1)+EFFICIENCY$
  421. 4210 A#=A#+SHIN#^(X-C-2)*(VAL(A$(C))+INT(ASC(A$(C))/65)*(ASC(A$(C))-55)*ABS(INT(ASC(A$(C))/71)-1)+INT(ASC(A$(C))/97)*(ASC(A$(C))-87))*ABS(INT(ASC(A$(C))/103)-1)
  422. 4220 IF SHIN#=<(VAL(A$(C))+INT(ASC(A$(C))/65)*(ASC(A$(C))-55)*ABS(INT(ASC(A$(C))/71)-1)+INT(ASC(A$(C))/97)*(ASC(A$(C))-87))*ABS(INT(ASC(A$(C))/103)-1) THEN D#(COUNT,2)=5:ER=1
  423. 4230 NEXT C
  424. 4240 *ERJP:D#(COUNT,0)=A#
  425. 4250 *DERIVJP2:NEXT COUNT
  426. 4260 PRINT "   =";
  427. 4270 FOR C=0 TO PARTS
  428. 4280 IF CAL%(C)=1 THEN PRINT "*";
  429. 4290 IF CAL%(C)=2 THEN PRINT "/";
  430. 4300 IF CAL%(C)=3 THEN PRINT "+";
  431. 4310 IF CAL%(C)=4 THEN PRINT "-";
  432. 4320 IF CAL%(C)=5 THEN PRINT "^";
  433. 4330 IF CAL%(C)=10 THEN PRINT "(";
  434. 4340 IF CAL%(C)=-10 THEN PRINT ")";
  435. 4350 COLOR 7-D#(C,2):PRINT P$(C);
  436. 4360 COLOR 7:NEXT C:PRINT
  437. 4370 RETURN
  438. 4380 '************************** 演算ルーチン ****************************
  439. 4390 *CIRCUM:'***** 各項のべき乗の連なりをチェックし、演算する。 *****
  440. 4400 ON ERROR GOTO *ERRLOOP
  441. 4410 SSUBTOTAL#=D#(C,0):CC=C:CKCIRC=0:ENDCIRC=C
  442. 4420 IF FLAGOFF-1<=C THEN D#(C,1)=1:RETURN
  443. 4430 *CIRCUM1
  444. 4440 CC=CC+1:IF CC=FLAGOFF THEN *CIRCUM2
  445. 4450 IF D#(CC,1)=1 THEN *CIRCUM1:'***** 計算済みの項を読み飛ばす *****
  446. 4460 IF CAL%(CC)=5 THEN CKCIRC=CKCIRC+1:ENDCIRC=CC:GOTO *CIRCUM1
  447. 4470 *CIRCUM2
  448. 4480 IF CKCIRC=0 THEN D#(C,1)=1:RETURN:'***** べき乗が連なっていない *****
  449. 4490 SSUBTOTAL#=D#(ENDCIRC,0):D#(ENDCIRC,1)=1
  450. 4500 CKCIRC=ENDCIRC:CIRCERR=0
  451. 4510 FOR CIRC=ENDCIRC-1 TO C STEP-1
  452. 4520 ON ERROR GOTO *ERRLOOP
  453. 4530 IF D#(CIRC,1)=1 THEN *CIRCUM4:'***** 計算済みの項を読み飛ばす *****
  454. 4540 IF D#(CIRC,0)=1 THEN SSUBTOTAL#=1:CIRCERR=0:GOTO *CIRCUM3
  455. 4550 IF D#(CIRC,0)=0 THEN IF SSUBTOTAL#<0 THEN CIRCERR=0 ELSE SSUBTOTAL#=0:D#(CIRC,1)=1:CIRCERR=0:GOTO *CIRCUM3
  456. 4560 IF CIRCERR=1 THEN D#(CIRC,1)=1:D#(CIRC,2)=5:ER=1:GOTO *CIRCUM3
  457. 4570 '***** 最大値を越える計算エラーを予防する *****
  458. 4580 IF LOG(1.79769313486231D+308)<ABS(SSUBTOTAL#)*LOG(ABS(D#(CIRC,0))) THEN COLOR 2:PRINT SPC(15);"《 べき乗数値が大きすぎます! 修正してください。》":D#(CKCIRC,1)=1:D#(CKCIRC,2)=5:ER=1:CIRCERR=0:COLOR 7:GOTO *CIRCUM3 
  459. 4590 ON ERROR GOTO *ERRLOOP:'***** 計算する *****
  460. 4600 SSUBTOTAL#=D#(CIRC,0)^SSUBTOTAL#:D#(CIRC,1)=1:CKCIRC=CKCIRC+1
  461. 4610 *CIRCUM3
  462. 4620 IF D#(CIRC,0)=1 THEN CKCIRC=0 ELSE CKCIRC=CIRC
  463. 4630 *CIRCUM4
  464. 4640 NEXT CIRC
  465. 4650 RETURN
  466. 4660 *CALC:'***** 式計算ルーチン *****
  467. 4670 FOR COUNT=0 TO CLMAX
  468. 4680 IF COUNT=CLMAX THEN FLAGON=0:FLAGOFF=PARTS+1:GOTO *CALCJP2
  469. 4690 FOR C=0 TO PARTS
  470. 4700 IF D#(C,1)=1 THEN *CALCJP1
  471. 4710 IF CAL%(C)=10 THEN FLAGON=C
  472. 4720 IF CAL%(C)=-10 AND FLAGON<>0 THEN FLAGOFF=C:GOTO *CALCJP2
  473. 4730 *CALCJP1:NEXT C
  474. 4740 *CALCJP2
  475. 4750 TOTAL#=0
  476. 4760 C=FLAGON:GOSUB *CIRCUM
  477. 4770 SUBTOTAL#=SSUBTOTAL#
  478. 4780 FOR C=FLAGON+1 TO FLAGOFF-1
  479. 4790 ON ERROR GOTO *ERRLOOP
  480. 4800 IF D#(C,1)=1 THEN *CALCJP3
  481. 4810 GOSUB *CIRCUM
  482. 4820 IF CAL%(C)=1 THEN SUBTOTAL#=SUBTOTAL#*SSUBTOTAL#
  483. 4830 IF CAL%(C)=2 THEN IF SSUBTOTAL#=0 THEN D#(C,1)=1:D#(C,2)=5:ER=1 ELSE SUBTOTAL#=SUBTOTAL#/SSUBTOTAL#
  484. 4840 IF CAL%(C)=3 THEN TOTAL#=TOTAL#+SUBTOTAL#:SUBTOTAL#=SSUBTOTAL#
  485. 4850 IF CAL%(C)=4 THEN TOTAL#=TOTAL#+SUBTOTAL#:SUBTOTAL#=-SSUBTOTAL#
  486. 4860 C=ENDCIRC
  487. 4870 *CALCJP3:NEXT C
  488. 4880 TOTAL#=TOTAL#+SUBTOTAL#:IF -10^-15<TOTAL# AND TOTAL#<10^-15 THEN TOTAL#=0
  489. 4890 IF COUNT=CLMAX THEN *CALCJP4
  490. 4900 D#(FLAGON-1,0)=TOTAL#:D#(FLAGON,1)=1:D#(FLAGOFF,1)=1
  491. 4910 *CALCJP4
  492. 4920 NEXT COUNT
  493. 4930 'PRINT FLAGON;FLAGOFF:'****************** CHECK *************
  494. 4940 'FOR C=0 TO PARTS
  495. 4950 'PRINT USING"###";C;:PRINT USING"######   ";CAL%(C);:PRINT USING"&           &";P$(C);:PRINT USING"######";D#(C,0);:PRINT USING"######";D#(C,1);:PRINT USING"######";D#(C,2)
  496. 4960 'NEXT C:'******************************************************
  497. 4970 RETURN
  498. 4980 '********************** 計算結果表示ルーチン ************************
  499. 4990 *SUBPRT:'***** 計算経過出力 *****
  500. 5000 ON ERROR GOTO *ERRLOOP
  501. 5010 PRINT "   =";
  502. 5020 FOR C=0 TO PARTS
  503. 5030 IF CAL%(C)=1 THEN PRINT "*";
  504. 5040 IF CAL%(C)=2 THEN PRINT "/";
  505. 5050 IF CAL%(C)=3 THEN PRINT "+";
  506. 5060 IF CAL%(C)=4 THEN PRINT "-";
  507. 5070 IF CAL%(C)=5 THEN PRINT "^";
  508. 5080 IF CAL%(C)=10 THEN PRINT "[";
  509. 5090 IF CAL%(C)=-10 THEN PRINT "]";
  510. 5100 IF CAL%(C)<>-10 THEN COLOR 7-D#(C,2):PRINT D#(C,0);
  511. 5110 COLOR 7
  512. 5120 NEXT C:PRINT
  513. 5130 RETURN
  514. 5140 *OUTPUT:'***** 計算結果出力 *****
  515. 5150 ON ERROR GOTO *ERRLOOP
  516. 5160 PRINT "   =";
  517. 5170 IF ER<>0 THEN COLOR 2:PRINT "ERROR":COLOR 7:GOTO *OPJP
  518. 5180 PRINT TOTAL#:STOTAL#=TOTAL#
  519. 5190 IF ABS(TOTAL#)>&HFFFFFFFF OR TOTAL#<>INT(TOTAL#) THEN IF TOTAL#<0 THEN PRINT "      < "; ELSE PRINT "      > "; ELSE PRINT "      = ";
  520. 5200 IF TOTAL#<0 THEN PRINT "- "; ELSE PRINT "  ";
  521. 5210 IF ABS(STOTAL#)>&HFFFFFFFF THEN STOTAL#=&HFFFFFFFF
  522. 5220 PRINT RIGHT$("00000000"+HEX$(ABS(STOTAL#)),8);" h";
  523. 5230 PRINT " = ";:A#=ABS(STOTAL#):C#=31
  524. 5240 IF TOTAL#<0 THEN PRINT "- "; ELSE PRINT "  ";
  525. 5250 *NISHIN:IF C#<0 THEN PRINT "( 2)":GOTO *OPJP ELSE PRINT USING "#";INT(A#/2^C#);:PRINT NISHIN$(C#);:A#=A#-INT(A#/2^C#)*2^C#:C#=C#-1:GOTO *NISHIN
  526. 5260 *OPJP
  527. 5270 COLOR 3:IF CLASS<0 THEN PRINT "〔(〕が";-CLASS;"個足りません。" ELSE IF CLASS>0 THEN PRINT "〔)〕が";CLASS;"個足りません。"
  528. 5280 RETURN
  529. 5290 *CONVOUT:'***** 3~15進数計算結果出力 *****
  530. 5300 IF ER<>0 THEN RETURN
  531. 5310 CSRX%=POS(0):CSRY%=CSRLIN:COLOR 6:PRINT "     《 計算結果を他の進数で表示しますか。【 YES→実行・NO→取消 】》"
  532. 5320 IF 22<CSRY% THEN CSRY%=22
  533. 5330 *SCVO:S$=INKEY$:GOSUB *PANEL:IF MOUSE(2,0) THEN GOSUB *COMUSIN
  534. 5340 IF S$="" THEN *SCVO
  535. 5350 IF S$="N" OR S$="n" OR S$=CHR$(24) OR S$=CHR$(27) THEN LOCATE CSRX%,CSRY%:COLOR 7:PRINT SPACE$(80);:LOCATE CSRX%,CSRY%:RETURN
  536. 5360 IF S$="Y" OR S$="y" OR S$=CHR$(13) THEN LOCATE CSRX%,CSRY%:COLOR 7:PRINT SPACE$(80);:LOCATE CSRX%,CSRY% ELSE *SCVO
  537. 5370 SHIN#=3
  538. 5380 *CVOSTART
  539. 5390 CONVOUT$="":A#=ABS(STOTAL#):C#=20:DCK=0
  540. 5400 COLOR 7:PRINT "   = ";
  541. 5410 *TASHIN
  542. 5420 IF C#<0 THEN *CVOJP
  543. 5430 SUBA#=INT(A#/SHIN#^C#)
  544. 5440 IF 0<SUBA# AND DCK=0 THEN DCK=1:IF TOTAL#<0 THEN CONVOUT$=CONVOUT$+"-" ELSE CONVOUT$=CONVOUT$+" "
  545. 5450 IF 9<SUBA# THEN CONVOUT$=CONVOUT$+CHR$(&H41+SUBA#-10) ELSE IF DCK=1 THEN CONVOUT$=CONVOUT$+RIGHT$(STR$(SUBA#),1) ELSE CONVOUT$=CONVOUT$+" "
  546. 5460 A#=A#-INT(A#/SHIN#^C#)*SHIN#^C#:C#=C#-1:GOTO *TASHIN
  547. 5470 *CVOJP
  548. 5480 IF DCK=0 THEN CONVOUT$="                     0"
  549. 5490 PRINT CONVOUT$;
  550. 5500 IF SHIN#=INT(SHIN#/2)*2 THEN PRINT USING "(##)";SHIN# ELSE PRINT USING "(##)";SHIN#;
  551. 5510 SHIN#=SHIN#+1
  552. 5520 IF SHIN#<16 THEN *CVOSTART
  553. 5530 RETURN
  554. 5540 *COMUSIN:'***** 3~15進数表示マウス選択 *****
  555. 5550 MUSX%=INT(MOUSE(0)/8):MUSY%=INT(MOUSE(1)/19)
  556. 5560 GOSUB *MUSTIME
  557. 5570 IF 44<=MUSX% AND MUSX%<=57 AND MUSY%=CSRY% THEN S$="Y":RETURN
  558. 5580 IF 58<=MUSX% AND MUSX%<=68 AND MUSY%=CSRY% THEN S$="N":RETURN
  559. 5590 RETURN
  560. 5600 '*********************** エラー処理ルーチン *************************
  561. 5610 *ERRLOOP
  562. 5620 IF ERR=6 THEN COLOR 2:PRINT SPC(18);"《 数値が大きすぎます! 修正してください。》" ELSE *EJP1
  563. 5630 D#(CIRC,2)=5:ER=1:CIRCERR=1:COLOR 7:'GOSUB *SUBPRT
  564. 5640 RESUME NEXT
  565. 5650 *EJP1
  566. 5660 IF ERR=5 THEN COLOR 5:PRINT SPC(20);"《 虚数を含みます! 修正してください。》" ELSE *EJP2
  567. 5670 D#(CIRC,1)=1:D#(CIRC,2)=2:ER=1:CIRCERR=1:COLOR 7:'GOSUB *SUBPRT
  568. 5680 RESUME *CIRCUM3
  569. 5690 *EJP2
  570. 5700 PRINT :COLOR 2:PRINT SPC(20);"《 対応できないエラーです。ごめんなさい。》":PRINT SPC(29);"line";ERL;": error no.";ERR
  571. 5710 *ESTOP2
  572. 5720 E$=INKEY$
  573. 5730 IF MOUSE(2,0) THEN E$=CHR$(13)
  574. 5740 IF E$="" THEN *ESTOP2
  575. 5750 RESUME *MAIN
  576. 5760 *RECERR:'***************************
  577. 5770 IF EP=1 THEN *RECPASS
  578. 5780 IF EP=2 THEN RESUME NEXT
  579. 5790 *RECPASS
  580. 5800 COLOR 5
  581. 5810 LOCATE 2,12
  582. 5820 PRINT "《Aドライブのデータフロッピーが不備です。計算式の記録・再生は行いません。》";
  583. 5830 C=0
  584. 5840 *RECPASSL
  585. 5850 IF 500<C THEN RESUME *START
  586. 5860 GOSUB *PANEL
  587. 5870 I$=INKEY$
  588. 5880 IF MOUSE(2,0) THEN I$=CHR$(13)
  589. 5890 C=C+1
  590. 5900 IF I$<>"" THEN C=500
  591. 5910 GOTO *RECPASSL
  592.